package org.jeecg.controller;

import org.jeecg.domain.dto.HistoryOrdersDto;
import org.jeecg.domain.dto.OrderDto;
import org.jeecg.domain.dto.OrderPageDto;
import org.jeecg.service.HistoryOrdersSyncService;
import org.jeecg.service.OrdersService;
import org.jeecg.utils.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * fzy
 * OrderController类是一个Spring RESTful风格的控制器，用于处理与订单相关的各种HTTP请求操作。
 * 该控制器依赖于OrdersService和HistoryOrdersSyncService来完成具体的业务逻辑，并通过ResponseResult返回统一格式的响应结果。
 */
@RestController
@RequestMapping("/order")
public class OrderController {

    /**
     * fzy
     * 通过Spring的依赖注入机制，自动注入OrdersService实例，
     * OrdersService主要负责处理常规订单相关的业务逻辑，例如查询、更新等操作。
     */
    @Autowired
    private OrdersService ordersService;

    /**
     * fzy
     * 通过Spring的依赖注入机制，自动注入HistoryOrdersSyncService实例，
     * HistoryOrdersSyncService主要负责处理历史订单相关的业务逻辑，像历史订单的查询、同步等操作。
     */
    @Autowired
    private HistoryOrdersSyncService historyOrdersSyncService;

    /**
     * fzy
     * 处理查询所有订单（分页）并可根据条件筛选的HTTP GET请求。
     *
     * @param dto 是一个OrderPageDto类型的参数，它封装了分页相关的信息（如页码、每页数量等）以及可能的查询条件（例如订单状态、客户信息等）。
     *            这个参数会传递给OrdersService的findPage方法，由其根据具体的业务逻辑去数据库中查询符合条件的订单数据，并进行分页处理。
     * @return 返回一个ResponseResult类型的结果，ResponseResult是一个统一格式的响应结果封装类，里面包含了查询到的订单数据（如果成功）、状态码、提示信息等内容，
     *         该结果由OrdersService的findPage方法返回，最终作为本次HTTP请求的响应返回给客户端。
     */
    @GetMapping("/findPage")
    public ResponseResult findPage(OrderPageDto dto) {
        // 此处打印dto信息，可能用于调试目的，查看传入的查询条件及分页参数情况
        System.out.println(dto);
        return ordersService.findPage(dto);
    }

    /**
     * fzy
     * 处理查询历史订单（分页）的HTTP GET请求。
     *
     * @param dto 是一个HistoryOrdersDto类型的参数，它同样封装了分页相关的信息以及针对历史订单特有的查询条件（比如历史订单的时间范围等）。
     *            该参数会传递给HistoryOrdersSyncService的findHistory方法，由其按照业务逻辑去查询相应的历史订单数据并进行分页处理。
     * @return 返回一个ResponseResult类型的结果，由HistoryOrdersSyncService的findHistory方法返回，包含了查询到的历史订单数据（若查询成功）、状态码、提示信息等，
     *         作为本次HTTP请求的响应返回给客户端。
     */
    @GetMapping("/findHistory")
    public ResponseResult findHistory(HistoryOrdersDto dto) {
        return historyOrdersSyncService.findHistory(dto);
    }

    /**
     * fzy
     * 处理根据订单ID查询订单状态的HTTP GET请求。
     *
     * @param id 通过@RequestParam注解从HTTP请求的参数中获取的订单ID，该ID是一个字符串类型，用于唯一标识一个订单。
     *           这个ID会传递给OrdersService的findOrderStatusById方法，以便其在数据库中查找对应订单的状态信息。
     * @return 返回一个ResponseResult类型的结果，其中包含了通过OrdersService查询到的对应订单的状态相关信息（如订单是已支付、已取消等状态）、状态码以及提示信息等，
     *         作为本次HTTP请求的响应返回给客户端。同时在方法内部打印了获取到的订单ID，可能用于调试查看请求的参数情况。
     */
    @GetMapping("/findOrderStatusById")
    public ResponseResult findOrderStatusById(@RequestParam("id") String id) {
        System.out.println(id);
        return ordersService.findOrderStatusById(id);
    }

    /**
     * fzy
     * 处理根据历史订单ID查询历史订单详细信息的HTTP GET请求。
     *
     * @param id 通过@RequestParam注解从HTTP请求的参数中获取的历史订单ID，同样是字符串类型，用于唯一标识一个历史订单。
     *           该ID会传递给HistoryOrdersSyncService的findHistoryById方法，由其去数据库中查找并返回对应历史订单的详细信息。
     * @return 返回一个ResponseResult类型的结果，包含了通过HistoryOrdersSyncService查询到的对应历史订单的详细信息（如订单详情、关联信息等）、状态码以及提示信息等，
     *         作为本次HTTP请求的响应返回给客户端。
     */
    @GetMapping("/findHistoryById")
    public ResponseResult findHistoryById(@RequestParam("id") String id) {
        return historyOrdersSyncService.findHistoryById(id);
    }
    @PostMapping("/findByStatus")
    public ResponseResult findByStatus(@RequestBody OrderDto dto){
        return ordersService.findByStatus(dto);
    }
}